//package com.kingyea.mobilepolice.test;
//
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.beans.factory.support.BeanDefinitionBuilder;
//import org.springframework.beans.factory.support.BeanDefinitionRegistry;
//import org.springframework.beans.factory.support.DefaultListableBeanFactory;
//import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
//import org.springframework.context.ApplicationContext;
//import org.springframework.context.ConfigurableApplicationContext;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.jdbc.core.JdbcTemplate;
//
//@Configuration
///**
// * 这里的conditional是一个可选条件，表示当这个表达式为true的时候，才动态创建bean
// */
//@ConditionalOnExpression("${my.configuration.enabled}")
//public class DynamicConfiguration {
//    @Autowired
//    private ApplicationContext applicationContext;
//
//    /**
//     * 这个方法返回Runnable只是一个幌子，最重要的是执行方法里面的代码
//     */
//    @Bean
//    public Runnable dynamicConfiguration() throws Exception {
//        ConfigurableApplicationContext context = (ConfigurableApplicationContext) applicationContext;
////        DefaultListableBeanFactory beanFactory = (DefaultListableBeanFactory) context.getBeanFactory();
//        BeanDefinitionRegistry beanFactory = (DefaultListableBeanFactory) context.getBeanFactory();
//
//        BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.rootBeanDefinition(UserService.class);
//        /**
//         * 设置属性
//         */
//        beanDefinitionBuilder.addPropertyValue("name", "myConfigure");
//        beanDefinitionBuilder.addPropertyValue("jdbcTemplate", applicationContext.getBean(JdbcTemplate.class));
//
//        /**
//         * 注册到spring容器中
//         */
//        beanFactory.registerBeanDefinition("userService", beanDefinitionBuilder.getBeanDefinition());
//        return null;
//    }
//}
//
//class UserService {
//    private String name;
//    private JdbcTemplate jdbcTemplate;
//
//    public String getName() {
//        return name;
//    }
//
//    public void setName(String name) {
//        this.name = name;
//    }
//
//    public JdbcTemplate getJdbcTemplate() {
//        return jdbcTemplate;
//    }
//
//    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
//        this.jdbcTemplate = jdbcTemplate;
//    }
//}